﻿using System.Collections.Generic;

namespace 队列模拟
{
    public class CurstomQueue<T>
    {
        private Queue<T> _queue = new Queue<T>();

        // 获取队列中的元素个数
        public int Count => _queue.Count;

        // 定义一个委托，用来给事件返回数据
        public delegate void QueueCallback(Queue<T> item, int cont);

        // 定义一个事件，当队列变化时触发
        // public event Action<int> QueueChanged;
        public event QueueCallback QueueChanged;

        // 入队方法
        public void Enqueue(T item)
        {
            _queue.Enqueue(item); // 添加元素
            QueueChanged?.Invoke(_queue, _queue.Count); // 触发事件，传递当前队列元素个数
        }

        // 出队方法
        public T Dequeue()
        {
            T item = _queue.Dequeue(); // 移除元素
            QueueChanged?.Invoke(_queue, _queue.Count); // 触发事件，传递当前队列元素个数
            return item;
        }

        // 清空队列
        public void Clear()
        {
            _queue.Clear();
            QueueChanged?.Invoke(_queue, _queue.Count); // 触发事件，传递当前队列元素个数
        }
    }

}
